package com.dongdongshop.controller;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.net.URL;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

@Controller
@RequestMapping("file")
public class FileUpload {

    @RequestMapping("upload")
    @ResponseBody
    public Map<String,String> upload(@RequestParam("image") MultipartFile image) {
        System.out.println(image);
        // 用SpringBoot 上传图片，不需要配置图片上传的工具 ，使用springmvc需要配置，因为springboot有一个自动配置功能
        //按照以前学的 ：
        // 定义一个绝对路径 如window D：/xx/xx Linux /xx/xx，然后调用springmvc的上传功能上传（io流）
        //现在我们不用了 ： 因为我们现在是分布式开发，如果我们使用了绝对路径，那么其他服务器上的项目是无法访问的
        //所以我们需要一个统一的存储服务器
        //阿里oss

        // Endpoint以杭州为例，其它Region请按实际情况填写。
        String endpoint = "oss-cn-beijing.aliyuncs.com";
        // 云账号AccessKey有所有API访问权限，建议遵循阿里云安全最佳实践，创建并使用RAM子账号进行API访问或日常运维，请登录 https://ram.console.aliyun.com 创建。

        //这个就好比是我们使用阿里云的账号和密码
        String accessKeyId = "LTAI4FuDBxYwEnXqiADNnrY5";
        String accessKeySecret = "8VrqgW4BPK33K7lz0tVHRSrivyLgMk";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        String bucketName = "dksuegnn";
        // 上传文件流。
        InputStream inputStream = null;

//        InputStream inputStream = new FileInputStream("D:/XXX/XXX.jpg");

        try {
            inputStream = image.getInputStream();//
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (ossClient.doesBucketExist(bucketName)) {
            System.out.println(bucketName + "已经存在");
        } else {
            ossClient.createBucket(bucketName); //创建bucket 方法
            System.out.println("创建bucket ： " + bucketName);
        }

        //文件名
        String imageName = new Date().getTime() + "/" + image.getOriginalFilename();
        System.out.println("图片的名字为：" + imageName);
        //第一个参数 ： bucket名字 第二个参数是我们要上传的文件的名字 ，第三个参数是文件的输入流
        ossClient.putObject(bucketName, imageName, inputStream);
       // ossClient.deleteObject(); 删除文件

        //去阿里云上查询文件，需要访问bucketName ， 还需要文件名 ,第三个参数：文件访问的有效时间 从当前毫秒值开始计算
        URL url = ossClient.generatePresignedUrl(bucketName, imageName, new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 365));
        // 关闭OSSClient。
        ossClient.shutdown();

        Map<String,String> map = new HashMap<>();
        map.put("imgUrl", url.toString());
        return map;
    }

}
